"""
Diese Klasse ist zustaendig fur die Anzeige bei Interaktionen. Hier wird der Text angezeigt und bei Tastendruck gewechselt.

@author: Max
"""

import os

import pygame

import Colors  # @UnresolvedImport


class Text(object):
    def __init__(self, log, res, text):
        self.surfHud = pygame.Surface(res).convert()
        self.surfHud.set_colorkey(Colors.RED)
        self.imgBG = pygame.image.load(os.path.join("..", "Resources", "Assets", "hud.png"))
        self.imgBG = pygame.transform.scale(self.imgBG, self.surfHud.get_size())
        self.surfHud.blit(self.imgBG, (0, 0))
        
        self.Log = log
        self.res = res
        
        self.lText = text.split("\n")
        
        self.iIndex = 0
        
        self.Font = pygame.font.Font(None, 30)
        self.strText = self.lText[self.iIndex]
        
        self.bCloseHud = False
        
        self.bDrawTriangle = True
        
        self.iTimeSinceLastAction = 0
    
    
    def render(self, dt):
        """
        Wenn ein HUD aktiv ist wird diese Funktion ausgefuehrt und stellt sicher, dass immer der richtige Text angezeigt wird.
        """
        self.iTimeSinceLastAction += dt
        
        self.surfHud.fill(Colors.RED)
        self.surfHud.blit(self.imgBG, (0, 0))
        self.dsText = self.Font.render(self.strText, 1, Colors.WHITE)
        
        self.drawTriangle()
        self.surfHud.blit(self.dsText, (10, 10))
        
       
    def drawTriangle(self):
        """
        Hier wird das kleine animierte Dreieck bei HUD-Fenster gerendert und entschieden, ob es angezeigt wird. (Alle 500 ms erfolgt ein Wechsel von Zeichnen/Nicht-Zeichnen)
        """
        if self.iTimeSinceLastAction > 0.5:
            if self.bDrawTriangle == True:
                self.bDrawTriangle = False
            else:
                self.bDrawTriangle = True
            self.iTimeSinceLastAction = 0
            
        if self.bDrawTriangle:
            pygame.draw.polygon(self.surfHud, Colors.WHITE, [ [self.res[0] * 0.97, self.res[0] * 0.14], [self.res[0] * 0.96, self.res[0] * 0.13], [self.res[0] * 0.98, self.res[0] * 0.13] ]) 
            
        

    def changeText(self):
        """
        Bei einem Druck auf die Leertaste wird hier der Text geaendert. Ist kein Text mehr vorhanden wird ein "True"-Rueckgabewert geliefert, sodass das Hud geschlossen werden kann.
        Sind noch Textfragmente uebrig wird der naechste angezeigt und ein "False" zurueckgeliefert.
        """

        self.iIndex += 1
        if self.iIndex < len(self.lText):        
            self.Log.printToLog("TextHUD: Anzeigetext wird geaendert.")
            self.strText = self.lText[self.iIndex]
        else:
            self.Log.printToLog("TextHUD: Kein Text mehr vorhanden.")
            self.bCloseHud = True
    
    def handleInput(self, event):
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                self.changeText()
        return 0 
    
    def update(self):
        pass
